/**
 * 研发流程状态机 - 常量定义
 * 根据研发流程状态机.md文档实现
 */

// 集合名称定义
const COLLECTION_NAMES = {
  PROJECT: 'research_project',
  RESOURCE: 'research_project_resource',
  STATE_HISTORY: 'research_project_state_history',
  SNAPSHOT: 'research_project_snapshot',
  BRANCH: 'research_project_branch'
};

/**
 * 状态字段名称定义
 */
const LEVEL1_FIELD = 'level1';
const LEVEL2_FIELD = 'level2';
const LEVEL3_FIELD = 'level3';
const LEVEL4_FIELD = 'level4';

/**
 * 项目状态定义 - 严格按照状态机文档
 */
const PROJECT_STATUS = {
  NONE: 0,           // 未定义状态（用于新建项目）
  PROJECT_REVIEW: 1,  // 项目审核
  DORMANT: 2,         // 休眠
  ACTIVE: 3,          // 活动
  COMPLETED: 99       // 已完成
};

/**
 * 项目状态名称映射
 */
const PROJECT_STATUS_NAMES = {
  [PROJECT_STATUS.NONE]: '未定义',
  [PROJECT_STATUS.PROJECT_REVIEW]: '项目审核',
  [PROJECT_STATUS.DORMANT]: '休眠',
  [PROJECT_STATUS.ACTIVE]: '活动',
  [PROJECT_STATUS.COMPLETED]: '已完成'
};

/**
 * 项目审核子状态
 */
const PROJECT_REVIEW_SUB_STATUS = {
  DIRECTOR: 'director',           // 董事长审核
  RD_MANAGER: 'rd_manager',       // 研发经理审核
  ASSIGNMENT: 'assignment'        // 项目分配
};

/**
 * 休眠子状态
 */
const DORMANT_SUB_STATUS = {
  REVIEW: 'review',               // 审核中
  ARCHIVE: 'archive'              // 已归档
};

/**
 * 活动状态定义
 */
const ACTIVE_STATE = {
  HARDWARE_CONFIRM: 'hardware_confirm',         // 硬件确认
  HARDWARE: 'hardware',                         // 硬件设计
  DEBUG: 'debug',                               // 软硬件调试
  DATA_SYNC: 'data_sync',                       // 资料同步
  TESTING: 'testing',                           // 测试验证
  CUSTOMER_CONFIRM: 'customer_confirm',         // 客户确认
  ORDER_PREPARATION: 'order_preparation',       // 订单准备 
  PRODUCTION: 'production',                     // 生产
  PRODUCT_FEEDBACK: 'product_feedback'          // 产品反馈
};

/**
 * 活动状态名称映射
 */
const ACTIVE_STATE_NAMES = {
  [ACTIVE_STATE.HARDWARE_CONFIRM]: '硬件确认',
  [ACTIVE_STATE.HARDWARE]: '硬件设计',
  [ACTIVE_STATE.DEBUG]: '软硬件调试',
  [ACTIVE_STATE.DATA_SYNC]: '资料同步',
  [ACTIVE_STATE.TESTING]: '测试验证',
  [ACTIVE_STATE.CUSTOMER_CONFIRM]: '客户确认',
  [ACTIVE_STATE.ORDER_PREPARATION]: '订单准备',
  [ACTIVE_STATE.PRODUCTION]: '生产',
  [ACTIVE_STATE.PRODUCT_FEEDBACK]: '产品反馈'
};

/**
 * 硬件子状态
 */
const HARDWARE_SUB_STATE = {
  DESIGN: 'design',               // 设计
  REVIEW: 'review',               // 审核
  SAMPLE: 'sample',               // 打样
  PRODUCTION_SAMPLE: 'prod_sample', // 制样
  IN_STOCK: 'in_stock'            // 在库
};

/**
 * 测试子状态
 */
const TESTING_SUB_STATE = {
  TESTING: 'testing',             // 测试中
  NO_TEST_REVIEW: 'no_test_review' // 免测审核
};

/**
 * 客户确认子状态
 */
const CUSTOMER_CONFIRM_SUB_STATE = {
  DELIVERY: 'delivery',           // 寄样
  TESTING: 'testing',             // 测试
  NO_SAMPLE_REVIEW: 'no_sample_review', // 无签样审核
  SAMPLE_IN_STOCK: 'sample_in_stock',   // 样品在库
  ARCHIVE: 'archive'              // 归档
};

/**
 * 订单准备子状态
 */
const ORDER_PREPARATION_SUB_STATE = {
  WAITING: 'waiting',             // 待量产
  REVIEW: 'review',               // 审核
  DOC_CONTROL: 'doc_control',     // 文控
  SUPPLEMENT: 'supplement',       // 补充资料
  PRE_MEETING: 'pre_meeting',     // 产前会
  PREPARATION: 'preparation'      // 生产准备
};

/**
 * 生产子状态
 */
const PRODUCTION_SUB_STATE = {
  PRODUCING: 'producing',         // 生产中
  PE_HANDLING: 'pe_handling',     // PE处理
  RD_CHECKING: 'rd_checking',     // 研发排查
  COMPLETED: 'completed'          // 完成
};

// 项目优先级
const PROJECT_PRIORITY = {
  LOW: 1,                         // 低
  MEDIUM: 2,                      // 中
  HIGH: 3                         // 高
};

// 项目分类
const PROJECT_CATE = {
  HARDWARE: 0,                    // 硬件项目
  SOFTWARE: 1,                    // 软件项目
  INTEGRATED: 2,                  // 综合项目
  RESEARCH: 3,                    // 研究项目
  OTHER: 4                        // 其他项目
};

/**
 * 子状态映射
 * 将各个子状态映射到统一格式
 */
const SUB_STATE = {
  // 项目审核子状态
  ...PROJECT_REVIEW_SUB_STATUS,
  
  // 休眠子状态
  ...DORMANT_SUB_STATUS,
  
  // 硬件子状态
  ...HARDWARE_SUB_STATE,
  
  // 测试子状态
  ...TESTING_SUB_STATE,
  
  // 客户确认子状态
  ...CUSTOMER_CONFIRM_SUB_STATE,
  
  // 订单准备子状态
  ...ORDER_PREPARATION_SUB_STATE,
  
  // 生产子状态
  ...PRODUCTION_SUB_STATE
};

/**
 * 状态事件定义
 */
const STATE_EVENTS = {
  // 项目审核事件
  SUBMIT_REQUEST: 'submit_request',              // 提交功能需求表
  DIRECTOR_APPROVE: 'director_approve',          // 董事长审核通过
  DIRECTOR_REJECT: 'director_reject',            // 董事长审核不通过
  MANAGER_APPROVE: 'manager_approve',            // 研发经理审核通过
  MANAGER_REJECT: 'manager_reject',              // 研发经理审核不通过
  PROJECT_ASSIGN_COMPLETE: 'project_assign_complete', // 提交分配
  
  // 休眠事件
  SLEEP_REQUEST: 'sleep_request',                // 业务提交休眠申请
  SLEEP_APPROVE: 'sleep_approve',                // 休眠审核通过
  SLEEP_REJECT: 'sleep_reject',                  // 休眠审核不通过
  WAKEUP_REQUEST: 'wakeup_request',              // 业务提交唤醒申请
  
  // 硬件确认事件
  HW_CONFIRM_COMPLETED: 'hw_confirm_completed',  // 硬件确认完成
  HW_EXISTING: 'hw_existing',                    // 已有硬件
  
  // 软硬件调试事件
  DEBUG_COMPLETE: 'debug_complete',              // 调试完成
  HW_CONFIRM_AGAIN: 'hw_confirm_again',          // 重新确认硬件
  CANCEL_FUNCTION_ISSUE: 'cancel_function_issue', // 撤销功能问题
  CANCEL_ISSUE: 'cancel_issue',                  // 撤销问题申请
  
  // 资料同步事件
  SYNC_COMPLETE: 'sync_complete',                // 同步完成
  
  // 测试验证事件
  TEST_PASS: 'test_pass',                        // 测试通过
  TEST_FAIL: 'test_fail',                        // 测试不通过
  NO_TEST_APPROVE: 'no_test_approve',            // 无测试审核通过
  
  // 客户确认事件
  CUSTOMER_RECEIVED: 'customer_received',        // 客户到样
  CUSTOMER_SIGN_SAMPLE: 'customer_sign_sample',  // 签实物样
  NO_SIGN_REQUEST: 'no_sign_request',            // 业务无签样申请
  NO_SIGN_MANAGER_APPROVE: 'no_sign_manager_approve', // 研发经理审核通过
  NO_SIGN_DIRECTOR_APPROVE: 'no_sign_director_approve', // 董事长审核通过
  NO_SIGN_REJECT: 'no_sign_reject',              // 无签样审核不通过
  SAMPLE_STORAGE_CONFIRM: 'sample_storage_confirm', // 样品管理员确认
  ARCHIVE_COMPLETE: 'archive_complete',          // 归档完成
  FIND_FUNCTION_ISSUE: 'find_function_issue',    // 发现功能问题
  SOLVE_PRODUCT_ISSUE: 'solve_product_issue',    // 解决在途产品问题
  
  // 订单准备事件
  ORDER_REQUEST: 'order_request',                // 业务提交订单
  ORDER_APPROVE: 'order_approve',                // 订单审核通过
  ORDER_REJECT: 'order_reject',                  // 订单审核不通过
  DOCS_SEND_COMPLETE: 'docs_send_complete',      // 资料发送完成
  DOCS_INCOMPLETE: 'docs_incomplete',            // 资料不完整
  DOCS_SUPPLEMENT_COMPLETE: 'docs_supplement_complete', // 资料补充完成
  MEETING_COMPLETE: 'meeting_complete',          // 会议完成
  PREPARATION_COMPLETE: 'preparation_complete',  // 准备完成
  CANCEL_ORDER: 'cancel_order',                  // 取消订单
  
  // 生产事件
  PRODUCTION_ISSUE: 'production_issue',          // 生产问题反馈
  PE_ISSUE_SOLVED: 'pe_issue_solved',            // 问题解决
  RD_ISSUE_FOUND: 'rd_issue_found',              // 发现设计问题
  RD_ISSUE_SOLVED: 'rd_issue_solved',            // 研发问题解决
  PRODUCTION_COMPLETE: 'production_complete',    // 生产完成
  
  // 项目终结事件
  PROJECT_END: 'project_end'                     // 项目终结
};

/**
 * 角色定义
 */
const ROLES = {
  BUSINESS_STAFF: 'business_staff',      // 业务人员
  DIRECTOR: 'director',                  // 董事长
  RESEARCH_MANAGER: 'research_manager',  // 研发经理
  HARDWARE_ENGINEER: 'hardware_engineer', // 硬件工程师
  SOFTWARE_ENGINEER: 'software_engineer', // 软件工程师
  TEST_ENGINEER: 'test_engineer',        // 测试工程师
  DOC_CONTROLLER: 'document_controller',  // 文控人员
  PRODUCTION_MANAGER: 'production_manager' // 生产主管
};

/**
 * 状态与角色权限映射
 */
const STATUS_ROLE_PERMISSIONS = {
  // 项目审核状态权限
  [PROJECT_STATUS.PROJECT_REVIEW]: {
    [PROJECT_REVIEW_SUB_STATUS.DIRECTOR]: [ROLES.DIRECTOR],
    [PROJECT_REVIEW_SUB_STATUS.RD_MANAGER]: [ROLES.RESEARCH_MANAGER],
    [PROJECT_REVIEW_SUB_STATUS.ASSIGNMENT]: [ROLES.RESEARCH_MANAGER]
  },
  
  // 休眠状态权限
  [PROJECT_STATUS.DORMANT]: {
    [DORMANT_SUB_STATUS.REVIEW]: [ROLES.RESEARCH_MANAGER],
    [DORMANT_SUB_STATUS.ARCHIVE]: [ROLES.DOC_CONTROLLER]
  },
  
  // 活动状态权限
  [PROJECT_STATUS.ACTIVE]: {
    [ACTIVE_STATE.HARDWARE_CONFIRM]: [ROLES.HARDWARE_ENGINEER],
    [ACTIVE_STATE.HARDWARE]: [ROLES.HARDWARE_ENGINEER],
    [ACTIVE_STATE.DEBUG]: [ROLES.SOFTWARE_ENGINEER, ROLES.HARDWARE_ENGINEER],
    [ACTIVE_STATE.TESTING]: [ROLES.TEST_ENGINEER],
    [ACTIVE_STATE.CUSTOMER_CONFIRM]: [ROLES.BUSINESS_STAFF],
    [ACTIVE_STATE.ORDER_PREPARATION]: [ROLES.PRODUCTION_MANAGER],
    [ACTIVE_STATE.PRODUCTION]: [ROLES.PRODUCTION_MANAGER],
    [ACTIVE_STATE.PRODUCT_FEEDBACK]: [ROLES.BUSINESS_STAFF]
  }
};

// 状态机数据库模式定义
const STATE_SCHEMA = {
  // 使用新字段名定义数据模型
  [LEVEL1_FIELD]: 'int|true|default=1|comment=项目状态：1=项目审核,2=休眠,3=活动,99=已完成',
  [LEVEL2_FIELD]: 'string|false|comment=项目子状态', 
  [LEVEL3_FIELD]: 'string|false|comment=活动状态',
  [LEVEL4_FIELD]: 'string|false|comment=活动子状态',
  
  // 其他状态相关字段
  STATUS_UPDATE_TIME: 'int|false|comment=状态更新时间',
  STATUS_EXPIRE_TIME: 'int|false|comment=状态截止时间',
  STATUS_DESC: 'string|false|comment=状态描述'
};

// 导出所有常量
module.exports = {
  // 集合名
  COLLECTION_NAMES,
  
  // 状态字段名
  LEVEL1_FIELD,
  LEVEL2_FIELD,
  LEVEL3_FIELD,
  LEVEL4_FIELD,
  
  // 状态定义
  PROJECT_STATUS,
  PROJECT_STATUS_NAMES,
  PROJECT_REVIEW_SUB_STATUS,
  DORMANT_SUB_STATUS,
  ACTIVE_STATE,
  ACTIVE_STATE_NAMES,
  HARDWARE_SUB_STATE,
  TESTING_SUB_STATE,
  CUSTOMER_CONFIRM_SUB_STATE,
  ORDER_PREPARATION_SUB_STATE,
  PRODUCTION_SUB_STATE,
  SUB_STATE,
  
  // 项目属性
  PROJECT_PRIORITY,
  PROJECT_CATE,
  
  // 事件和其他常量
  STATE_EVENTS,
  STATE_SCHEMA,
  
  // 角色定义
  ROLES,
  
  // 状态与角色权限映射
  STATUS_ROLE_PERMISSIONS,
  
  // 以下为兼容旧代码，新代码应使用上面对应的常量
  STATUS: PROJECT_STATUS,
}; 